package com.hina.rec.application.service.system;

import com.hina.rec.common.model.IdReq;
import com.hina.rec.endpoint.req.system.SettleDetailPageReq;
import com.hina.rec.endpoint.req.system.SettleDetailSaveReq;
import com.hina.rec.endpoint.req.system.SettleDetailUpdateReq;
import com.hina.rec.endpoint.res.base.PageRes;
import com.hina.rec.endpoint.res.system.SettleDetailRes;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 结算明细 Service接口
 *
 * @author liaosp
 * @date 2024-01-05
 */
public interface SettleDetailService {

    /**
     * 创建结算明细
     *
     * @param req 创建请求
     * @return 是否成功
     */
    boolean save(SettleDetailSaveReq req);

    /**
     * 更新结算明细
     *
     * @param req 更新请求
     * @return 是否成功
     */
    boolean update(SettleDetailUpdateReq req);

    /**
     * 删除结算明细
     *
     * @param id 结算明细ID
     * @return 是否成功
     */
    boolean delete(Integer id);

    /**
     * 分页查询结算明细
     *
     * @param req 查询请求
     * @return 分页结果
     */
    PageRes<SettleDetailRes> page(SettleDetailPageReq req);

    /**
     * 获取结算明细详情
     *
     * @param req ID请求
     * @return 结算明细详情
     */
    SettleDetailRes detail(IdReq req);

    /**
     * 导入结算明细
     *
     * @param file Excel文件
     * @return 是否成功
     * @throws IOException IO异常
     */
    boolean importExcel(MultipartFile file) throws IOException;

    /**
     * 导出结算明细
     *
     * @param response HTTP响应
     * @param req      查询请求
     * @throws IOException IO异常
     */
    void exportExcel(HttpServletResponse response, SettleDetailPageReq req) throws IOException;
}